/*
 * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
 * Copyright Nokia 2007-2019
 * Copyright Siemens AG 2015-2019
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */

#ifndef OPENSSL_CMP_UTIL_H
#define OPENSSL_CMP_UTIL_H
#pragma once

#include <openssl/opensslconf.h>
#ifndef OPENSSL_NO_CMP

#include <openssl/macros.h>
#include <openssl/trace.h>

#ifdef __cplusplus
extern "C"
{
#endif

    int OSSL_CMP_log_open(void);
    void OSSL_CMP_log_close(void);
#define OSSL_CMP_LOG_PREFIX "CMP "

    /*
     * generalized logging/error callback mirroring the severity levels of syslog.h
     */
    typedef int OSSL_CMP_severity;
#define OSSL_CMP_LOG_EMERG 0
#define OSSL_CMP_LOG_ALERT 1
#define OSSL_CMP_LOG_CRIT 2
#define OSSL_CMP_LOG_ERR 3
#define OSSL_CMP_LOG_WARNING 4
#define OSSL_CMP_LOG_NOTICE 5
#define OSSL_CMP_LOG_INFO 6
#define OSSL_CMP_LOG_DEBUG 7
#define OSSL_CMP_LOG_TRACE 8
#define OSSL_CMP_LOG_MAX OSSL_CMP_LOG_TRACE
    typedef int (*OSSL_CMP_log_cb_t)(const char *func, const char *file, int line,
                                     OSSL_CMP_severity level, const char *msg);

    int OSSL_CMP_print_to_bio(BIO *bio, const char *component, const char *file, int line,
                              OSSL_CMP_severity level, const char *msg);
    /* use of the logging callback for outputting error queue */
    void OSSL_CMP_print_errors_cb(OSSL_CMP_log_cb_t log_fn);

#ifdef __cplusplus
}
#endif
#endif /* !defined(OPENSSL_NO_CMP) */
#endif /* !defined(OPENSSL_CMP_UTIL_H) */
